/*
消息数组标准格式
msg[i]=n;
n=new Array();

n['fromid']=fromid
n['name']=name
n['img']=imghead(32*32)
n['simg']=tinyimg(16*16)
n['type']=msgtype
n['num']=num
n['msgs']=msg(array)

-------------------------------------
				sm:标准消息
				af:添加好友
				gp:群消息

				nw:新闻
				sy:系统消息
				gs:群系统消息

sm标准消息结构
n[type]=sm
n[sender]=[fromid,name,isvip,img32,img16]
n[msgs]=[消息1][消息2][消息3]....

af请求添加好友信息结构 自带图标
n[type]=af
n[addmsg]=[addfrdmsg]

gp 群消息结构
n[type]=gp
n[sender]=[fromid,name,img32,img16]
n[msgs]=[[消息1][消息2]][消息3]...]

gs 群系统消息结构 自带图标
n[type]=gs
n[msgs]=[fromid,name,msg]

sy系统消息 自带图标
n[type]=sy
n[msgs]=[[消息1][消息2][消息3]...]

nw 新闻 自带图标
n[type]=nw
n[news]=[腾讯网迷你版]/直接弹出特别新闻



*/


function Msgbox(setobj)
{
	//是否闪烁 0,1
	var isflash=setobj.isflash;
	//是否显示消息内容 0,1
	var showcnt=setobj.showcnt;
	
	//存储消息数组
	var msgs=new Array();

	//定时器
	var fl=null;

	//初始化面板方法
	this.init=function(msg)
	{
		$("body").append(
			'<div id="msgbox">'+
			'<div class="msgboxbar">'+
			'<div class="usernick">'+usrinfo.name+'</div>'+
			'<div class="msgboxset">'+
			'<img src="img/setting_16.png"/>'+
			'<img src="img/down16.png"/>'+
			'</div>'+
			'<div class="clear"></div>'+
			'</div>'+
			'<ul id="msgboxlist"></ul>'+
			'<div class="msgboxbottom">'+
			'<div class="ignoreall">忽略全部</div>'+
			'<div class="viewall">查看全部</div>'+
			'<div class="clear"></div>'+
			'</div></div>'
		);
		$("#msgbox").css("display","none");
		//再添加
		if(msg.length>0&&msg!=false)
		{
			msgs=msg;//直接
			addmsg(msg,"init");
		}
		//绑定事件
		_initbind();

		//设置闪烁
		setflash();
		tempvar.startchunk=true;
	}

	//获取指定信息方法
	this.get=getmsg=function(type,fid)
	{
		var arr=0;
		//查找指定条目
		for(var i in msgs)
		{
			if(msgs[i]['sender']['id']==fid&&msgs[i]['type']==type)
			{
				arr=msgs[i];
				if($("#msgboxlist>li").is("#msg_"+msg[i]['type']+"_"+msg[i]['sender']['id']))
				{
					//移除li
					$("#msg_"+msg[i]['type']+"_"+msg[i]['sender']['id']).remove();

					//ul下清空后暂定隐藏消息盒子
					if($("#msgboxlist>li")==false||$("#msgboxlist>li")==""||$("#msgboxlist>li")==undefined)
					{
						$("#msgbox").css("display","none");
					}


					//移除数组中的本项目
					if(msgs.length==1)
					{
						msgs=new Array();
					}
					else
					{
						//$.grep一个bug
						/*
							如果筛选结果是空数组，则返回原来的值，不会返回空
							因此这里上面要多一个判断
							解决2015/6/12 17:49 （尼玛搞了我一天时间）
						*/
						msgs=$.grep(msgs,function(n,index)
						{
							return n!=i;
						});
					}

					//闪烁下一个消息
					setflash();
				}
				break;
			}
		}
		//返回指定数组
		return arr;
	}


	


	var _initbind=function()
	{
		//打开设置
		$("#msgbox .msgboxset").click(function()
		{
			setting.create();
		});

		//忽略全部事件
		$(".msgboxbottom>.ignoreall").click(function()
		{
			//停止闪烁
			if(fl)
			{
				clearInterval(fl);
				fl=null;
			}
			//重设QQ图标
			$("#qqico").attr("class","");
			$("#qqico>img").attr("src","img/peper_16.png");
			//隐藏消息盒子
			$("#msgbox").css("display","none");
			

		});

		//查看全部事件
		$(".msgboxbottom>.viewall").click(function()
		{
			//循环打开全部消息
			for (var i in msgs)
			{
				//触发li点击事件
				$("#msgboxlist>li").trigger('click',["msgs_"+msgs[i]['type']+"_"+msgs[i]['fromid']]);
			}
		});

		//li消息点击事件
		$("#msgboxlist>li").click(function(e,in_id)
		{
			//判断是加好友消息，用户消息，群消息，群系统消息，新闻消息，系统消息
			var id=in_id||$(this).attr('id');
			
			if(id.indexOf("sm")>=0)
			{
				var msg=getmsg("sm",id.replace("msg_sm_",""));
				//打开聊天框
				console.log("msgbox下的sm_msg:"+msg);
			}
			else if(id.indexOf("af")>=0)
			{
				var msg=getmsg("af",id.replace("msg_af_",""));
				//判断打开好友验证框
				console.log("msgbox下的af_msg:"+msg);
			}
			else if(id.indexOf("nw")>=0)
			{
				var msg=getmsg("nw",id.replace("msg_nw_",""));
				//判断打开新闻框
				console.log("msgbox下的nw_msg:"+msg);

			}
			else if(id.indexOf("sy")>=0)
			{
				var msg=getmsg("sy",id.replace("msg_sy_",""));
				//判断打开系统消息
				console.log("msgbox下的sy_msg:"+msg);
			}
			else if(id.indexOf("gp")>=0)
			{
				var msg=getmsg("gp",id.replace("msg_gp_",""));
				//判断打开群消息
				console.log("msgbox下的gp_msg:"+msg);
			}
			else if(id.indexOf("gs")>=0)
			{
				var msg=getmsg("gs",id.replace("msg_gs_",""));
				//打开群系统消息
				console.log("msgbox下的gs_msg:"+msg);
			}
			
		});
		
		//QQ图标鼠标触摸，失焦，点击事件
		$("#qqico").mouseover(function()
		{
			if($(this).find("img").attr("src")!="img/peper_16.png")
			{
				console.log();
				if($("#msgboxlist").children()!==""&&$("#msgboxlist").children()!==undefined&&$("#msgboxlist").children()!==false)
				{
					$("#msgbox").css("display","block");
				}
			}
		}).mouseout(function()
		{
			if($(this).find("img").attr("src")!="img/peper_16.png")
			{
				$("#msgbox").mouseover(function()
				{
					$("#msgbox").css("display","block");

				}).mouseout(function()
				{
					$("#msgbox").css("display","none");
					$("#msgboxsetting").remove();
				});
			}	
		}).click(function()
		{
			if($(this).find("img").attr("src")!="img/peper_16.png")
			{
				//触发li点击事件
				$("#msgboxlist>li").trigger('click',[$(this).attr("class")]);
			}
		});
	}
	this.add=addmsg=function(inputmsg,flag)
	{
		if(inputmsg==undefined||!inputmsg)
		{
			return;
		}
		var msg="";
		//先格式化数组并加入到消息数组中
		if(flag=="init")
		{
			/*
			新结构的初始消息数组
			n[type]=cm
			n[sender]=[fromid,name,isvip,img32,img16]
			n[msgs]=[[消息1][消息2][消息3]....]	

			li的全称 msg_x_num
			x{
				sm:标准消息
				af:添加好友
				nw:新闻
				sy:系统消息
				gp:群消息
				gs:群系统消息
			}
			*/

			msg=msgs;

			//循环将msgs内容加入li
			for(var i in msg)
			{
				if(msg[i]['type']=="sm")
				{
					//判断是否已经存在
					if($("#msgboxlist>li").is("#msg_"+msg[i]['type']+"_"+msg[i]['sender']['id']))
					{
						//已经存在的话：
						//显示最新内容
						if(showcnt==1)
						{
							$("#msg_"+msg[i]['type']+"_"+msg[i]['sender']['id']).find(".cnt").html(msg[i]['msgs'][msg[i]['msgs'].length-1]['content']);
						}
						//更新消息数
						$("#msg_"+msg[i]['type']+"_"+msg[i]['sender']['id']+" > .newnum").find(".numcnt").html(msg[i]['msgs'].length);
					}else
					{
						var newmsg="";
						if(showcnt==1)
						{
							newmsg=msg[i]['msgs'][msg[i]['msgs'].length-1]['content'];
						}
						var img=msg[i]['sender']['img32']==""?"userhead2_32.png":msg[i]['sender']['img32'];

						//不存在的话，新建
						$("#msgboxlist").append(
						'<li id="msg_'+msg[i]['type']+'_'+msg[i]['sender']['id']+'"><div class="frdhead">'+
						'<img src="img/'+img+'"/></div>'+
						'<div class="newcnt">'+
						'<div class="frdname">'+msg[i]['sender']['name']+'</div>'+
						'<div class="cnt">'+newmsg+'</div>'+
						'</div><div class="newnum"><div class="numcnt">'+msg[i]['msgs'].length+'</div><div class="cantsee"><img src="img/cantsee_24.png"/></div></div></li>'	
						);
					}
				}
				else if(msg[i]['type']=="af")
				{
					//判断是否已经存在
					if($("#msgboxlist>li").is("#msg_"+msg[i]['type']+"_"+msg[i]['addmsg']['id']))
					{
						return;
						
					}else
					{
						//不存在的话，新建
						$("#msgboxlist").append(
						'<li id="msg_'+msg[i]['type']+'_'+msg[i]['sender']['id']+'"><div class="syshead">'+
						'<img src="img/addfrd_16.png"/></div>'+
						'<div class="syscnt">'+
						ownname+'请求添加您为好友'+
						'</div><div class="newnum"><div class="cantsee"><img src="img/cantsee_24.png"/></div></div></li>'	
						);
					}
				}
				
			}
		}
		else
		{
			setmsg(inputmsg);
			msg=inputmsg;
			//判断是否已经存在
				if($("#msgboxlist>li").is("#msg_"+msg['type']+"_"+msg['sender']['id']))
				{
					//已经存在的话：
					//显示最新内容
					if(showcnt==1)
					{
						$("#msg_"+msg['type']+"_"+msg['sender']['id']).find(".cnt").html(msg['msgs'][msg['msgs'].length-1]['content']);
					}
					//更新消息数
					$("#msg_"+msg['type']+"_"+msg['sender']['id']+" > .newnum").find(".numcnt").html(msg['msgs'].length);
				}else
				{
					var newmsg="";
					if(showcnt==1)
					{
						newmsg=msg['msgs'][msg['msgs'].length-1]['content'];
					}
					var img=msg['sender']['img32']==""?"userhead2_32.png":msg['sender']['img32'];
	
					//不存在的话，新建
					$("#msgboxlist").append(
					'<li id="msg_'+msg['type']+'_'+msg['sender']['id']+'"><div class="frdhead">'+
					'<img src="img/'+img+'"/></div>'+
					'<div class="newcnt">'+
					'<div class="frdname">'+msg['sender']['name']+'</div>'+
					'<div class="cnt">'+newmsg+'</div>'+
					'</div><div class="newnum"><div class="numcnt">'+msg['msgs'].length+'</div></div></li>'	
					);
				}
		}
		//设置闪动
		setflash();

	}
	
	//设置闪动
	/*
		闪动的都是排在数组最后的内容的好友头像
	*/
	var setflash=function()
	{
		clearInterval(fl);
		if(isflash==1)
		{
			//如果还有未读消息，则显示最新的好友头像
			//没有的话就显示回QQ图标
			if(msgs.length>0)
			{
				var timg=msgs[msgs.length-1]['sender']['img16']==""?"qqico_16.png":msgs[msgs.length-1]['sender']['img16'];
				var type=msgs[msgs.length-1]['type'];
				var fromid=msgs[msgs.length-1]['sender']['id'];
				$("#qqico").attr("class","msg_"+type+"_"+fromid);
				var fn=function()
				{
					$("#qqico>img").attr("src")=="img/peper_16.png"||$("#qqico>img").attr("src")=="img/tran_16.png"?$("#qqico>img").attr("src","img/"+timg):$("#qqico>img").attr("src","img/tran_16.png");
				};
				fl=setInterval(fn,500);

			}
			else
			{
				fl=null;
				$("#qqico").attr("class","");
				$("#qqico>img").attr("src","img/peper_16.png");
			}
		}
	}

	//将输入的数组格式化加入到msgs消息数组中，没有返回值
	//输入的格式必须按照如下
	/*
	n[type]=xx
	n[sender]=[id,name,isvip,img32,img16]
	n[msgs]=[[消息1]]	数组中只能有一个消息数组（单条输入）	
	*/
	var setmsg=function(msg)
	{
		cm=msg;
		var flag=true;
		//如果已经有该消息数组，则追加
		for(var i in msgs)
		{
			if(msgs[i]['sender']['id']==cm['sender']['id']&&msgs[i]['type']==cm['type'])
			{
				msgs[i]['msgs'][msgs[i]['msgs'].length]=cm['msgs'][0];
				flag=false;
			}
			
		}
		//还没有的话则加入
		if(flag)
		{
			msgs[msgs.length]=cm;
		}
		
	}


	//设置小面板
	var setting=
	{
		create:function()
		{
			var right=parseInt($("#msgbox").css("right"))+5;
			var bottom=parseInt($("#msgbox").css("bottom"))+69;
			

			$("body").append(
			'<div id="msgboxsetting"><ul>'+
			'<li id="closeflash">关闭头像闪动</li>'+
			'<li id="closecnt">不显示会话内容</li>'+
			'<li id="remindset">设置会话消息提醒</li>'+
			'</ul></div>'	
			);
			$("#msgboxsetting").css("right",right+"px");
			$("#msgboxsetting").css("bottom",bottom+"px");
		
			this._bind();
		},
		_bind:function()
		{
			$("#closeflash").click(function()
			{
				isflash=0;
				//停止闪烁
				if(fl)
				{
					clearInterval(fl);
					fl=null;
				}
				//重设QQ图标
				$("#qqico").attr("class","");
				$("#qqico>img").attr("src","img/peper_16.png");

				//发送设置取消闪烁消息请求

			});

			$("#closecnt").click(function()
			{
				showcnt=0;
				//发送设置不显示会话内容请求

			});
			$("#remindset").click(function()
			{
				//打开设置面板
			});
		},
		remove:function()
		{
			$("#msgboxsetting").remove();
		}
	};
	
}
